|
|
![]() | |
|
|
|
To access the contents, click the chapter and section titles.
Visual Basic 6 Programming Blue Book: The Most Complete, Hands-On Resource for Writing Programs with Microsoft Visual Basic 6!
Listing 10.1 Objects and properties in OLE_DEMO.FRM.
Begin VB.Form frmOleDemo
Caption = OLE Demonstration
Begin VB.OLE OLE1
End
Begin VB.Menu mnuFile
Caption = &File
Begin VB.Menu mnuFileSave
Caption = &Save
End
Begin VB.Menu mnuFileSep
Caption = -
End
Begin VB.Menu mnuFileExit
Caption = &Exit
End
End
Begin VB.Menu mnuObject
Caption = &Object
Begin VB.Menu mnuInsert
Caption = &Insert
End
Begin VB.Menu mnuObjectDelete
Caption = &Delete
End
End
End
The program code is shown in Listing 10.2. It starts by declaring a few constants and global variables in the forms General Declarations section. For simplicitys sake, I have defined a constant for the name of the OLE data file, OLE_DEMO.DAT. Heres how the program works. When its running, the user can select the Insert Object command to display the Insert Object dialog box, and then use this dialog box (as described earlier in the chapter) to insert either a new object or one based on an existing file. The inserted object can be activated and edited using the server application; pressing Esc ends in-place activation and returns to the programs own menu. For example, Figure 10.5 shows an inserted Excel spreadsheet activated for editing. Note how the Visual Basic program displays Excels menu while the object is activated. After editing the object, press Esc to deactivate the object and redisplay the Visual Basic programs menus. Once an object has been inserted, you can use the File Save command to save it to disk under the predefined file name. The Object Delete command deletes the object from the OLE control. The program keeps track of whether the inserted object has been saved to disk. Use Object Insert to insert a different object, if desired. When the program begins, it checks to see if the data file exists on disk. If it does, you are offered the option of loading it into the OLE control. I assume that the file name OLE_DEMO.DAT will not conflict with an existing file on your disk; if it does, change the constant definition in the program to use another name. This program is a good demonstration of how the capabilities of the OLE control make it easy to program OLE support into our Visual Basic programs. OLE opens a whole new world of possibilities. The power of our programs is no longer limited to the code we have the time and skill to write, or to the custom controls that you can afford to buy.
Listing 10.2 Code in OLE_DEMO.FRM.
Option Explicit
Option Explicit
Constant for OLE object type.
Const OLE_EMBEDDED = 1
Constant for the OLE data file name.
Const FILE_NAME = OLE_DEMO.DAT
Global variables and flags.
Dim DataSaved As Boolean
Dim ObjectPresent As Boolean
Private Sub Form_Load()
Dim FileNum As Long, Reply As Integer
ObjectPresent = False
DataSaved = True
See if the OLE data file exists. If it does, offer
the option of loading it.
If Dir$(FILE_NAME) <> Then
Reply = MsgBox(Load OLE data from disk?, vbYesNo + vbQuestion, _ Load Object)
If Reply = vbYes Then
Screen.MousePointer = 11
FileNum = FreeFile
Open FILE_NAME For Binary As #FileNum
OLE1.ReadFromFile FileNum
ObjectPresent = True
Close #FileNum
Screen.MousePointer = 0
End If
End If
End Sub
Private Sub Form_Resize()
Size the OLE control to fill the form.
OLE1.Move 0, 0, frmOleDemo.ScaleWidth, frmOleDemo.ScaleHeight
End Sub
Private Sub mnuFile_Click()
Enable Save menu command only if an object exists.
If ObjectPresent Then
mnuFileSave.Enabled = True
Else
mnuFileSave.Enabled = False
End If
End Sub
Private Sub mnuFileExit_Click()
Dim Reply As Integer
If the object has not been saved, offer the option.
If Not DataSaved Then
Reply = MsgBox(Save OLE object before quitting?, _
vbYesNoCancel + vbQuestion, Delete Object)
If Reply = vbYes Then
Call SaveObject
ElseIf Reply = vbCancel Then
Exit Sub
End If
End If
End
End Sub
Private Sub mnuFileSave_Click()
Call SaveObject
End Sub
Private Sub mnuInsert_Click()
Dim Reply As Integer
If an object is already present in the OLE control, ask the user if it
should be deleted. If the reply is no exit sub.
If ObjectPresent Then
Reply = MsgBox(Delete current object?, vbYesNo + vbQuestion, _
Insert Object)
If Reply = vbYes Then
Call mnuObjectDelete_Click
Else
Exit Sub
End If
End If
Permit only embedded objects.
OLE1.OLETypeAllowed = OLE_EMBEDDED
Display the OLE Insert Object Dialog.
frmOleDemo.OLE1.InsertObjDlg
ObjectPresent = True
DataSaved = False
Screen.MousePointer = 0
End Sub
Private Sub mnuObject_Click()
Enable the Delete menu command
only if an object is present.
If ObjectPresent Then
mnuObjectDelete.Enabled = True
Else
mnuObjectDelete.Enabled = False
End If
End Sub
Private Sub mnuObjectDelete_Click()
Dim Reply As Integer
If the object has not been saved, offer the
user the option of saving it.
If Not DataSaved Then
Reply = MsgBox(Save the object before deleting it?, vbYesNoCancel _
+ vbQuestion, Delete Object)
If Reply = vbYes Then
Call SaveObject
ElseIf Reply = vbCancel Then
Exit Sub
End If
End If
Delete the object.
OLE1.DELETE
ObjectPresent = False
DataSaved = True
End Sub
Private Sub OLE1_DblClick()
The OLE object is automatically activated for editing because its
AutoActivate property has been left at the default value of 2. Otherwise
we would have to execute the DoVerb method to activate it.
DataSaved = False
End Sub
Private Sub OLE1_Updated(Code As Integer)
If the data is changed by the server, clear the Saved flag.
DataSaved = False
End Sub
Private Sub SaveObject()
Dim FileNum As Integer
Save the OLE object.
FileNum = FreeFile
Open FILE_NAME For Binary As #FileNum
OLE1.FileNumber = FileNum
OLE1.SaveToFile FileNum
DataSaved = True
Close #FileNum
End Sub
OLE AutomationThe first part of this chapter presented two sides of the OLE triangle: linking data objects and embedding data objects. These are powerful toolsbut triangles have three sides, so something must be missing. There is, indeed: OLE automation the newest component of OLE, and in some ways, the most powerful. In the remainder of this chapter, well take a look at the basics of OLE automation in Visual Basic. How Does It Work?At the heart of OLE automation is a special kind of data object called a programmable data object. Like nonprogrammable objects, programmable data objects can be embedded or linked in a container application. What makes them special is the ability to accept messages from other applications. These messages can contain commands instructing the data object to perform actions on its data. The messages can also pass data to and from the programmable object. Heres a simple example. Suppose you need to add up a column of numbers in your Visual Basic program. Rather that writing the code yourself, you could use OLE automation to send the numbers to an Excel spreadsheet object, instruct it to add them up, then return the result to the program. You wouldnt use OLE automation for such a simple task, of course, but it gives you an idea of what OLE automation is all about. Server applications that expose programmable objects can be considered custom controls whose capabilities are available to other applications.
|
|
Products | Contact Us | About Us | Privacy | Ad Info | Home
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement. |